package scalaoop


object TestFunction {
  /**
    * result=bibao=add_sum=(x:Int)=>{
                                     sum += x
                                     println(sum)
    }
    这里面就相当于add_sum这个函数在外部访问了sum变量
    */
  def main(args: Array[String]): Unit = {
    val result=bibao  //执行这句代码，sum初始化为0
    result(2) //2
    result(2) //4
    result(2)  //6
    result(2)  //8

    val result1=bibao
    result1(3) //11

  }
  //闭包就是一个函数,add_sum也是一个函数
  //sum被包含在了闭包中，能否在闭包的外部访问sum，
  //普通情况下，sum是闭包函数的全局变量，和闭包函数平行的方法是不能访问的。
  //能否在一个函数的外部访问函数内部的变量呢，可以借助闭包实现
  //如何实现闭包，就是在闭包函数的内部在定义一个add_sum函数去访问
  val bibao={
    var sum=0
    //函数都是单例的
    val add_sum=(x:Int)=>{
      sum += x
      println(sum)
    }
    add_sum
  }
}
